package org.springframework.beans.factory.config;

import org.springframework.beans.factory.HierarchicalBeanFactory;
import org.springframework.core.convert.ConversionService;
import org.springframework.util.StringValueResolver;

/**
 * @Name ConfigurableBeanFactory
 * @Description: 基于（Xml）配置的 Bean 容器接口
 * 描述信息：继承自 HierarchicalBeanFactory 和 SingletonBeanRegistry 接口，具备二者能力，同时扩展为基于配置的标识接口。
 * - HierarchicalBeanFactory：分层次的 Bean 容器。
 * - SingletonBeanRegistry：单例 Bean 实例的注册表。
 * 扩展：新增 Configurable 声明，扩展为基于（Xml）配置的标识接口。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 16:03:24
 **/
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry {
    /**
     * 注册 BeanPostProcessor 信息
     *
     * @param beanPostProcessor BeanPostProcessor 实现类
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-19 20:40:20
     */
    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);

    /**
     * 添加内嵌值（或占位符）解析器至 Bean 容器内
     *
     * @param valueResolver 内嵌值（或占位符）解析器
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-10 16:12:50
     */
    void addEmbeddedValueResolver(StringValueResolver valueResolver);

    /**
     * 解析 @Value、@Autowired 等注解中内嵌的值（或占位符）
     *
     * @param value 内嵌值（或占位符）
     * @return java.lang.String
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-10 16:04:59
     */
    String resolveEmbeddedValue(String value);

    /**
     * 添加类型转换服务至 Bean 容器内
     *
     * @param conversionService 类型转换服务
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-11 18:01:30
     */
    void setConversionService(ConversionService conversionService);

    /**
     * 获取类型转换服务
     *
     * @return org.springframework.core.convert.ConversionService 类型转换服务
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-11 18:02:33
     */
    ConversionService getConversionService();

}
